
文章同步發表在我的個人 Blog
釘在畫面底部的按鈕,字級放大之後會變成什麼樣子?
Day 20 截圖自審時,我記下一個 P2:卡片詳情在大字級下,底部固定的兩顆按鈕占掉大半個畫面。今天把它修掉。先講結果:大字級時,次要操作改成跟著內容一起捲動,只有主要操作還釘在底部;內容區從只看得到一則留言,變成整個畫面都是內容。
卡片詳情的底部有兩顆次要按鈕:「標記完成」和「用 LINE 告訴他」。一般字級下它們很小,沒有問題。調到大字級(Dynamic Type 的 accessibility3)之後:

左邊是修改前:兩顆按鈕固定在畫面下半部,留言區只剩一則留言的上半截;「用 LINE 告訴他」還斷成兩行。
這個操作列是用 safeAreaInset(edge: .bottom) 固定在底部的。字級放大時,按鈕裡的文字變大、換行,按鈕變高;固定列變高,能給內容的空間就跟著縮小。內容區是用剩下的空間,所以字級越大,內容越少,這正好跟需要大字級的人想看到的相反。
SwiftUI 的環境值 dynamicTypeSize 有一個屬性 isAccessibilitySize,可以知道現在是不是無障礙字級。我的做法是把操作分成兩種:
@Environment(\.dynamicTypeSize) private var dynamicTypeSize
// scroll content
if dynamicTypeSize.isAccessibilitySize {
secondaryActions // scrolls with the content
}
// pinned bar
if model.isPendingForMe { PrimaryButton(...) } // always pinned
if !dynamicTypeSize.isAccessibilitySize { secondaryActions }
還有一個小細節:大字級時,如果沒有「知道了」要按、也沒有儲存失敗的提示,固定列就整個不顯示,不留一條空白的底。
照這個專案的流程,先寫測試、看到紅燈,再改程式。測試用 XCUITest,分兩個情境:
改程式之前,大字級的測試失敗、一般字級的測試通過(本來就是這樣);改完之後兩個都通過。

兩種大字級下,標題、留言都占滿畫面,不再被按鈕蓋住。
| 項目 | 結果 |
|---|---|
| 大字級的卡片詳情 | 次要操作移進內容,內容占滿畫面 |
| 新增測試 | 2 個(大字級、一般字級) |
verify.sh |
VERIFY: PASS(規則測試 93、App 測試 172) |
| 「用 LINE 告訴他」斷成兩行 | 這次沒有改按鈕本身,還是會斷行 |
Day 23 繼續實際使用,挑下一個觀察到的問題。
官方文件